#ifndef NctiWindowKeyEvent_H
#define NctiWindowKeyEvent_H
#include "NctiWindowEvent.h"
#include "ncti_event.h"
#include <vector>
namespace NCTI
{
	/**
   * @brief window key event
   * @see NctiWindowEvent
   */
	class DECL_NCTI_WINDOW NctiWindowKeyEvent : public NctiWindowEvent
	{
	public:
		NctiWindowKeyEvent(NctiWindowObject* i_pWindowObject);
		virtual ~NctiWindowKeyEvent();
	public:
		/**
	   * @brief add keyboard code
	   * @param[in] i_KeyboardCode
	   * @param[in] i_keycode
	   * @param[in] i_modKeys
	   */
		void AddKeyboardCode(KeyboardCode i_KeyboardCode, Ncti_Integer i_keycode, ModifierKeys i_modKeys);
		/**
	   * @brief remove keyboard code
	   * @param[in] i_KeyboardCode
	   */
		void RemoveKeyboardCode(KeyboardCode i_KeyboardCode);
		/**
	   * @brief get all  keyboard code
	   * @param[out] o_KeyboardCodeVec
	   */
		void GetKeyboardCodeVec(std::vector<KeyboardCode>& o_KeyboardCodeVec);
		/**
	   * @brief get all ModifierKeys
	   * @param[out] o_ModKeysVec
	   */
		void GetModKeysVec(std::vector<ModifierKeys>& o_ModKeysVec);
		/**
	   * @brief get first keyboard code
	   * @return KeyboardCode
	   */
		KeyboardCode GetFirstKeyboardCode();
		/**
	   * @brief determine whether it is character
	   * @return Ncti_Boolean
	   */
		Ncti_Boolean IsCharacter();
		/**
	   * @brief get first keyboard code value
	   * @return Ncti_Integer
	   */
		Ncti_Integer GetFirstKeyCodeValue();
	private:
		std::vector<KeyboardCode> m_KeyboardCodeVec;
		std::vector<Ncti_Integer> m_keycodeVec;
		std::vector<ModifierKeys> m_modKeysVec;
	};
}
#endif
